package org.persistente.xml;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author philipe
 */
public class ListParser<T> extends Parser<List<T> > {
    
    
    private String childName;
    private CompositeParser<T> parser;

    public ListParser(String childName, CompositeParser<T> parser) {
        this.childName = childName;
        this.parser = parser;
    }   
    

    @Override
    public void init(Context context) {
        Object obj = new ArrayList<T>();
        context.objects.push(obj);
    }

    @Override
    public void use(Context context, String attribute, Object value) {
        ArrayList<T> list = (ArrayList<T>)context.objects.peek();
        list.add((T)value);
    }

    @Override
    public void start(Context context, String attribute) {
        if(childName.equals(attribute)){
            context.attributes.push(attribute);
            context.parsers.push(parser);
            parser.init(context);
        }
    }

    @Override
    public void end(Context context) {
        List<T> list = (ArrayList<T>) context.objects.pop();
        T[] ar = (T[])Array.newInstance(parser.getCompositeClass(), list.size());
        list.toArray(ar);
        context.objects.push(ar);
        super.end(context);
    }
    
    
    
    
}
